#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void sort(int* array, int nCnt)
{
    int max;
    int min;
    int nRange;
    int* lpTmp;
    int k;

    //
    //  寻找最大最小值
    //

    max = array[0];
    min = array[0];
    for (int i = 0; i < nCnt; i++)
    {
        if (array[i] > max)
            max = array[i];

        if (array[i] < min)
            min = array[i];
    }

    //
    //  申请内存
    //

    nRange = max - min + 1;
    lpTmp = (int*)malloc(sizeof(int) * nRange);
    if (!lpTmp) return;
    memset(lpTmp, 0, sizeof(int) * nRange);

    //
    //  计数
    //

    for (int i = 0; i < nCnt; i++)
        lpTmp[array[i] - min]++;

    //
    //  排序
    //

    k = 0;
    for (int i = 0; i < nRange; i++)
    {
        while (lpTmp[i]--)
        {
            array[k] = i + min;
            k++;
        }
    }

    free(lpTmp);
}

int main()
{
    int array[9] = { 2,8,5,1,3,11,7,2,6 };

    sort(array, sizeof(array) / sizeof(int));

    for (unsigned int i = 0; i < (sizeof(array) / sizeof(int)); ++i)
        printf("%d ", array[i]);
    puts("");

    return 0;
}